import { defineConfig } from "vite";
import react from "@vitejs/plugin-react";
import removeConsolePlugin from "./vite-plugin-remove-console";
// import checker from 'vite-plugin-checker';
// import { visualizer } from 'rollup-plugin-visualizer';
// import { imagemin } from "vite-plugin-imagemin";
// import { VitePWA } from "vite-plugin-pwa";
// import { visualizer } from 'rollup-plugin-visualizer';

// const isProduction = process.env.NODE_ENV === 'production';

// https://vite.dev/config/
export default defineConfig({
  // base: "https://cdn.example.com/", // CDN 地址
  // 2.14-工单10-减少生产环境构建时间-使用 Vite 缓存
  cacheDir: 'node_modules/.vite', // 指定缓存目录
  plugins: [
    react(),
    removeConsolePlugin(),
    // imagemin({
    //   // 2.14-工单10-图片压缩插件
    //   // 配置项
    //   gifsicle: {
    //     optimizationLevel: 3, // 中等优化
    //     interlaced: true, // 启用交错加载
    //   },
    //   optipng: {
    //     optimizationLevel: 5, // 中等优化
    //   },
    //   mozjpeg: {
    //     quality: 75, // 中等质量
    //   },
    //   pngquant: {
    //     quality: [0.65, 0.8], // 质量范围
    //   },
    //   svgo: {
    //     plugins: [{ removeViewBox: false }],
    //   },
    // }),
    // VitePWA({ // PWA 插件
    //   registerType: 'autoUpdate',
    //   manifest: {
    //     name: 'vite-project',
    //     short_name: 'App',
    //     theme_color: '#ffffff',
    //   },
    // }),
    // visualizer({
    //   open: true, // 构建完成后自动打开分析报告
    // }),
    // 2.14-工单10-减少生产环境构建时间-使用 vite-plugin-checker 并行执行类型检查，减少构建时间。
    // checker({
    //   typescript: true,
    // }),
    
  ],
  define: {
    "process.env.VITE_API_URL": process.env.VITE_API_URL,
  },
  server: {
    proxy: {
      // 选项写法
      "/api": {
        target: "http://localhost:3000",
        changeOrigin: true,
        rewrite: (path) => path.replace(/^\/api/, ""),
      },
    },
  },
  build: {
    // 2.14-工单10-减少打包的 JavaScript 和 CSS 文件体积-压缩代码
    minify: "terser", // 启用代码压缩/使用 terser 压缩代码
    sourcemap: true, // 生成 sourcemap以便调试
    cssCodeSplit: true, // 启用 CSS 代码分割
    rollupOptions: {
      // cache: 'node_modules/.vite-cache',
      output: {
        manualChunks: {
          react: ["react", "react-dom"],
          vendor: [ "axios"], // 将和axios打包到单独的vendor chunk/手动分割第三方库
        },
      },
    },
    terserOptions: {
      compress: {
        drop_console: true,
      },
    },
    cssMinify: true, // 启用 CSS 压缩
  },
  // 2.14-工单10-配置依赖项构建
  // 优化依赖项
  // 优化依赖项，可以手动指定需要构建的依赖，也可以排除不需要构建的依赖。
  // 这有助于减少构建时间，并提高构建速度。
  optimizeDeps:{
    include:['axios'], //手动指定需要构建的依赖
    exclude:['some-package'], //排除不需要构建的依赖
  }
});
